﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BIZMA._controls;
using BIZModel;
using BL.BIZControls;
using System.Configuration;
using System.Web.Security;
using System.Web.Configuration;

namespace BIZMA._controls.DemoProject
{
    public partial class Edit_Customer : BIZEditControl, IBIZControlDefaultMethods
    {
        #region Default load functions
        public void DefaultListLoad()
        {
            throw new NotImplementedException();
        }

        public void DefaultListLoad(Guid Id, string loadByType)
        {
            throw new NotImplementedException();
        }

        public void DefaultEditNew()
        {
            NewCustomer();
        }

        public void DefaultEditNew(Guid Id, string editByType)
        {
            throw new NotImplementedException();
        }

        public void DefaultEditLoad(Guid Id)
        {
            LoadCustomer(Id);
        }


        #endregion

        //Skapa objecttyper för att beskriva objekt i generella funktioner
        /// <summary>
        /// ObjectType för kund används där typ av objekt ska beskrivas tex i generella metoder där bara ett id och objettype finns
        /// </summary>
        public const string ObjectTypeCustomer = "CUSTOMER";

        //Skapa eventtyper för att beskriva vilket event som sker i generella eventfunktioner
        /// <summary>
        /// EventType för knappen visa rättigheter
        /// </summary>
        public const string EventTypeOpenPermissions = "OPENPERMISSIONS";


        //Properties för att hålla reda på om en dialog kan öppnas eller om den redan är öppen i en underliggande dialog
        public bool CanAddProjectDialog { get { return ViewState["CanAddProjectDialog"] != null ? (bool)ViewState["CanAddProjectDialog"] : true; } set { ViewState["CanAddProjectDialog"] = value; } }

        #region Init
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack || !InitLoaded)
            {
                ApplySettings();
                //Gör sådant som man gör på pageload här typ fyll "statisk" dropdown med värden mm 
                //Väldigt ovanligt att man laddar listan härifrån då det oftast görs via en annan metod se public void LOAD_BY_SOMETHING_LIST(int someval)
            }

            //Vill man lyssna på specifika event från laddade kontroller ska det reggas här
            //OnInit sker innan så då är Container.ContainedControl alltid null eftersom kontrollerna i denna inte är laddade ännu
            //if (mcSOMESUBLIST.ContainedControl != null)
            //{
            //    ((BIZListControl)mcSOMESUBLIST.ContainedControl).ListSelect += new SelectedChanged(mcSOMESUBLIST_ListSelect);
            //}
        }


        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //här gör man alla init inställningar tex lägga till eventhandlers och annat som styr sidan
            if (ContainerControl != null)
            {
                //Titel på containerkontrollen
                ContainerControl.Title = "Administrera kund";
                //Event vid klick på knapparna i containerkontrollen
                ContainerControl.ButtonsClick += new ButtonsHandler(ContainerControl_ButtonsClick);
                //Vilka knappar den här kontrollen använder/vill visa från containerkontrollens knappar
                ContainerControl.ShowButtons(true, true, true, true);

                if (ModalContainerControl != null)
                {
                    ModalContainerControl.Width = 700;
                    ModalContainerControl.Height = 470;
                    ModalContainerControl.FormScrollStyleChanged += new EventHandler(ModalContainerControl_FormScrollStyleChanged);
                }

                //Sätt validation group från Containercontrollen så de blir unika på sidan
                val_Name.ValidationGroup = ContainerControl.ValGroupSave;

                //Kontrollera om det går att öppna dialoger så det inte har blivit en loop av underliggande dialoger
                //Används i ToggleButtons()
                CanAddProjectDialog = mcProjects.CanAddPopupControl(BIZControl.DEMOProjectList);
            }
            else
            {
                //Om det inte finns någon containercontrol

                //Validation groups för validatorer i kontrollen
                val_Name.ValidationGroup = "SAVE";
            }

            //Registrera event som sker i kontrollen
            btnProjects.Command += new CommandEventHandler(btnProject_Command);
        }

        /// <summary>
        /// Utför ändringar i kontrollen utifrån de inställningar som gjorts från föälder till denna kontroll
        /// Funktionen körs automatiskt på onLoad om den inte körts innan
        /// Exempel på hur man använder
        /// Skapa ett event på att kontrollen laddas (men gör det i metoden där kontrollen läggs till eftersom du bara vill trigga detta en gång)
        /// mContainer.BIZControlLoaded += new ControlLoaded(mContainer_BIZControlLoaded);
        /// mContainer.DefaultEditLoad(BIZControl.Employee, EmployeeId);
        /// 
        /// Gör lite inställningar på kontrollen tex:
        /// ((CAST_TO_TYPE)mContainer.ContainedControl).SOME_PROPERTY = SOME_VALUE;
        /// ((CAST_TO_TYPE)mContainer.ContainedControl).ApplySettings();
        /// </summary>
        public void ApplySettings()
        {
            //Gör sådant som man gör på pageload här typ fyll "statisk" dropdown med värden mm 
            //Om tabbar används i kontrollen
            //SetTabSize = true; 
            InitLoaded = true;
        }


        #endregion
        #region Container Events
        void ModalContainerControl_FormScrollStyleChanged(object sender, EventArgs e)
        {
            //Sätter samma style (storlek) på FormPart som formscroll så den fyller hela ytan
            oneFormpart.Attributes["style"] = formscroll.Attributes["style"];
        }

        /// <summary>
        /// Triggas vid klick på någon av containerkontrollens knappar
        /// </summary>
        /// <param name="sender">Containerkontrollen</param>
        /// <param name="actionType">Vilken typ av knapp som klickats</param>
        void ContainerControl_ButtonsClick(object sender, ActionType actionType)
        {
            if (actionType == ActionType.Save || actionType == ActionType.SaveClose)
            {
                Save();
            }
            else if (actionType == ActionType.Delete)
            {
                Delete();
            }
        }


        #endregion

        #region Events This Control

        void btnProject_Command(object sender, CommandEventArgs e)
        {
            if (HandleButtonClick)
            {
                CallHandledButtonClick(this, CurrentId, ObjectTypeCustomer, EventTypeOpenPermissions);
            }
            else
            {
                mcProjects.AddDefaultListLoad(BIZControl.DEMOProjectList, CurrentId, List_Projects.ObjectTypeCustomer);
            }
        }
        #endregion

        #region Methods this dialog



        /// <summary>
        /// Aktiverar/inaktiverar knappar som behöver data eller som inte kan visas pga underliggande dialoger 
        /// </summary>
        private void ToggleButtons()
        {
            //Sätt status om knappen kan visas pga underliggande dialoger
            BaseBL.BtnOpenEnabled(btnProjects, CanAddProjectDialog, ViewState);

            //Sätt status om knappen kan visas pga data som krävs
            if (CurrentId != Guid.Empty)
            {
                if (CanAddProjectDialog)
                {
                    BaseBL.BtnNeedsDataEnabled(btnProjects, true, ViewState);
                }
            }
            else
            {
                if (CanAddProjectDialog)
                {
                    BaseBL.BtnNeedsDataEnabled(btnProjects, false, ViewState);
                }
            }
        }



        /// <summary>
        /// Kör denna metod när en ny kund ska skapas
        /// </summary>
        public void NewCustomer()
        {
            //CurrentProjectId = Guid.Empty;
            LoadCustomer(Guid.Empty);
        }

        /// <summary>
        /// Kör denna metod när en kund ska ändras/visas
        /// </summary>
        /// <param name="customerId">Kunden som ska laddas</param>
        public void LoadCustomer(Guid customerId)
        {
            InitLoaded = true;
            CurrentId = customerId;


            if (CurrentId != Guid.Empty)
            {
                BIZMAEntities ent = BaseBL.GetEnt();
                BIZModel.Customer customer = ent.Customers.FirstOrDefault(q => q.CustomerId == CurrentId);

                txtName.Text = customer.Name;
                txtDescription.Text = customer.Description;
                txtEmail.Text = customer.Email;
                txtPhone.Text = customer.Phone;
                txtWebSite.Text = customer.WebSite;
            }
            else
            {
                txtName.Text = "";
                txtDescription.Text = "";
                txtEmail.Text = "";
                txtPhone.Text = "";
                txtWebSite.Text = "";
            }

            ToggleButtons();
        }

        /// <summary>
        /// Spara
        /// </summary>
        private void Save()
        {
            //SAVE
            if (Page.IsValid)
            {

                BIZMAEntities ent = BaseBL.GetEnt();
                BIZModel.Customer customer = null;

                if (CurrentId == Guid.Empty)
                {
                    CurrentId = Guid.NewGuid();

                    customer = BIZModel.Customer.CreateCustomer(CurrentId,txtName.Text);
                    customer.Description = txtDescription.Text;
                    customer.Email = txtEmail.Text;
                    customer.Phone = txtPhone.Text;
                    customer.WebSite = txtWebSite.Text;

                    ent.Customers.AddObject(customer);
                    ent.SaveChanges();
                }
                else
                {

                    customer = ent.Customers.FirstOrDefault(q => q.CustomerId == CurrentId);
                    customer.Name = txtName.Text;
                    customer.Description = txtDescription.Text;
                    customer.Email = txtEmail.Text;
                    customer.Phone = txtPhone.Text;
                    customer.WebSite = txtWebSite.Text;
                    ent.SaveChanges();
                }

                //Ändra aktivering av knappar efter sparning / eller kör load metoden 
                ToggleButtons();
            }
        }

        private void Delete()
        {
            if (CurrentId != Guid.Empty)
            {
                BIZMAEntities ent = BaseBL.GetEnt();
                BIZModel.Customer customer = ent.Customers.FirstOrDefault(q => q.CustomerId == CurrentId);
                ent.DeleteObject(customer);
                ent.SaveChanges();
            }

        }






        #endregion

        #region Sub dialog events

        #endregion




    }
}